package Source;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;

public class Categoria_DAO implements DAO  {

	private String sentenciaSQL;
    ConexionDB conexion;
    LinkedList<Categoria_POJO> listaDetalle = new LinkedList<Categoria_POJO>();
    ResultSet resultado;
    int valor;
    String temp;
    
    public Categoria_DAO() {
        this.conexion = new ConexionDB();
    }


    public LinkedList<Categoria_POJO> obtenerReg(int idCategoria) throws SQLException {
        
        temp="SELECT * FROM Categoria WHERE idCategoria=?";
        PreparedStatement ps=conexion.prepareStatement(temp);
        ps.setInt(1, idCategoria);
        resultado=ps.executeQuery();
        // sentenciaSQL = "SELECT * FROM Categoria WHERE idCategoria = " + idCategoria;
        // System.out.println("Obtener "+sentenciaSQL);
         try {
        	 conexion.abrirConexion();
        //    resultado = conexion.getResultSet(sentenciaSQL);
                 
            if (resultado.next()) {
                Categoria_POJO categoria = new Categoria_POJO();
                
                categoria.setCategoria_idCategoria(Integer.parseInt(resultado.getString("Categoria_idCategoria")) );
                categoria.setIdCategoria(Integer.parseInt(resultado.getString("idCategoria")));
                categoria.setTitulo(resultado.getString("titulo"));
                System.out.println(categoria+"----------");
                listaDetalle.add(categoria);                
            }
        } catch (Exception ex) {
            //Error lanzado
            System.out.println("Error " + ex);            
        }
         ps.close();
        return listaDetalle;
    }
    
    public int guardarReg(String titulo, int Categoria_idCategoria  ) throws SQLException{
    	temp="INSERT INTO Categoria (titulo, Categoria_idCategoria  ) VALUES (?,? )";
        PreparedStatement ps=conexion.prepareStatement(temp);
        ps.setString(1,titulo);
        ps.setInt(2, Categoria_idCategoria);
      /*  sentenciaSQL = "INSERT INTO Categoria (titulo, Categoria_idCategoria  ) VALUES "
                 + "('"+ titulo+"', "+ Categoria_idCategoria+" )";
         
        System.out.println("Query:  "+sentenciaSQL);
        * 
        * */
        
        try {
       	 	conexion.abrirConexion();
            valor = ps.executeUpdate();
            //System.out.println ("Delete exitoso");
            ps.close();
            conexion.cerrarConexion();
            return valor;
            
       } catch (Exception ex) {
            System.out.println("error " + ex);
            return -1;
       }
    }

    public int actualizarReg( int idCategoria, String  titulo, int Categoria_idCategoria ) throws SQLException{
    
        temp="UPDATE Categoria SET titulo= ?,Categoria_idCategoria=? WHERE idCategoria=?" ;
        PreparedStatement ps=conexion.prepareStatement(temp);
        ps.setString(1, titulo);
        ps.setInt(2, Categoria_idCategoria);
        ps.setInt(3, idCategoria);
        
    /*    
        
        sentenciaSQL = "UPDATE Categoria SET titulo= '"+ titulo+"',Categoria_idCategoria= "+ Categoria_idCategoria
                     + " WHERE idCategoria="+idCategoria ;            
             System.out.println("Update "+sentenciaSQL);       
             * 
             * */
             
         try {
            	 conexion.abrirConexion();
                 //valor = conexion.executeQuery(sentenciaSQL);
                 valor=ps.executeUpdate();
                 ps.close();
                 //System.out.println ("Delete exitoso");
                 conexion.cerrarConexion();
                 return valor;
                 
            } catch (Exception ex) {
                 System.out.println("error " + ex);
                 return -1;
            }
    }
     
    public int eliminarReg (int idCategoria ) throws SQLException{
        
        temp="DELETE FROM Categoria WHERE idCategoria=?";
    /*	sentenciaSQL = "DELETE FROM Categoria WHERE idCategoria = "+idCategoria;
        System.out.println("Delete Query: "+sentenciaSQL);*/
        PreparedStatement ps=conexion.prepareStatement(temp);
        ps.setInt(1,idCategoria);
        try {
       	 	conexion.abrirConexion();
            //valor = conexion.executeQuery(sentenciaSQL);
                valor=ps.executeUpdate();
                ps.close();
            //System.out.println ("Delete exitoso");
            conexion.cerrarConexion();
            return valor;
            
       } catch (Exception ex) {
            System.out.println("error " + ex);
            return -1;
       }
    }
    
    public LinkedList<Categoria_POJO> obtenerCategorias(){
    	
    	sentenciaSQL = "SELECT DISTINCT(titulo) FROM Categoria";
    	System.out.println("Categorias Query: "+sentenciaSQL);
    	try {
            resultado = conexion.getResultSet(sentenciaSQL);
            if (resultado.next()) {
                Categoria_POJO categoria = new Categoria_POJO();
                
                categoria.setTitulo(resultado.getString("titulo"));
                listaDetalle.add(categoria);                
            }
        } catch (Exception ex) {
            //Error lanzado
            System.out.println("Error " + ex);            
        }
        return listaDetalle;
    }
    
    public ResultSet obtenerArticuloporCategoria(int idCategoria) throws SQLException{  
        temp="SELECT c.titulo,a.nombre FROM Categoria c, articulo a WHERE c.idCategoria = ? ORDER BY c.titulo";
        PreparedStatement ps=conexion.prepareStatement(temp);
        ps.setInt(1, idCategoria);
    	//sentenciaSQL = "SELECT c.titulo,a.nombre FROM Categoria c, articulo a WHERE c.idCategoria = "+idCategoria+" ORDER BY c.titulo";
        System.out.println("Articulos por Categoria Query: "+sentenciaSQL);
        try {
        	conexion.abrirConexion();
            //resultado = conexion.getResultSet(sentenciaSQL);
                resultado=ps.executeQuery();
                ps.close();
            conexion.cerrarConexion();
            return resultado;

        } catch (Exception ex) {
            System.out.println("error " + ex);
            conexion.cerrarConexion();
            return null;
        }
    	}
    }
